💯 solving-algo | January 04, 2021
Algorithm, Python, Hash, import collection.Counter
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
| participant | completion | return |
|---|---|---|
| [leo, kiki, eden] | [eden, kiki] | leo |
| [marina, josipa, nikola, vinko, filipa] | [josipa, filipa, marina, nikola] | vinko |
| [mislav, stanko, mislav, ana] | [stanko, ana, mislav] | mislav |
예제 #1 leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #2 vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #3 mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(participant)):
if participant[i] not in completion:
return participant[i]우선 문제에서 중요한 힌트 중 하나인
“단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.”
위의 구문을 참고해 정렬 시킨 후 중복되는 값을 고려하지 않고 completion의 배열 안에 없으면
return 하도록 하였다. 3개의 테스트 케이스 중 2개는 통과하였고,
나머지 하나는 중복되는 동명이인이 있어 NULL이 값이 나오며 풀리지 않았다.
def solution(participant, completion):
participant.sort()
completion.sort()
for i, z in zip(participant, completion):
print(i, z)
if i != z:
return i
return participant[-1]completion 리스트에서 participant에만 단 하나의 인덱스만 추가적으로 많으므로,zip()함수로 결과 값이 틀린 것은 완주하지 못한 선수.competion 리스트의 인덱스가 끝날 때까지 결과 값이 같으면,participant 리스트에서 마지막 값이 완주하지 못한 선수 이므로 participant[-1]를 해주어 문제 해결!from collections import Counter
def solution(participant, completion):
ans = Counter(participant) - Counter(completion)
return list(ans)[0]collections 모듈에서 Counter 이라는 메서드를 제공해준다.
Counter는 엄밀히 말해 dict()는 아니지만 dict() 형태로 값을 변환해주고,
우리가 쉽게 해당 데이터에 대해서 몇개가 있는지 개수 파악을 하고 hash문제 풀이에 용이할 것 같다.